package cn.iocoder.yudao.module.system.api.push;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.system.api.message.MessageTypeApi;
import cn.iocoder.yudao.module.system.api.message.dto.MessageTypeCreateReqDTO;
import cn.iocoder.yudao.module.system.api.message.dto.MessageTypePageReqDTO;
import cn.iocoder.yudao.module.system.api.message.dto.MessageTypeRespDTO;
import cn.iocoder.yudao.module.system.api.message.dto.MessageTypeUpdateReqDTO;
import cn.iocoder.yudao.module.system.api.push.dto.PushManageCreateReqDTO;
import cn.iocoder.yudao.module.system.api.push.dto.PushManagePageReqDTO;
import cn.iocoder.yudao.module.system.api.push.dto.PushManageRespDTO;
import cn.iocoder.yudao.module.system.api.push.dto.PushManageUpdateReqDTO;
import cn.iocoder.yudao.module.system.controller.admin.messageType.vo.MessageTypeCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.messageType.vo.MessageTypePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.messageType.vo.MessageTypeUpdateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.pushManage.vo.PushManageCreateReqVO;
import cn.iocoder.yudao.module.system.controller.admin.pushManage.vo.PushManagePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.pushManage.vo.PushManageRespVO;
import cn.iocoder.yudao.module.system.controller.admin.pushManage.vo.PushManageUpdateReqVO;
import cn.iocoder.yudao.module.system.convert.messageType.MessageTypeConvert;
import cn.iocoder.yudao.module.system.convert.pushManage.PushManageConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.messageType.MessageTypeDO;
import cn.iocoder.yudao.module.system.dal.dataobject.pushManage.PushManageDO;
import cn.iocoder.yudao.module.system.service.messageType.MessageTypeService;
import cn.iocoder.yudao.module.system.service.pushManage.PushManageService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

@Service
public class PushApiImpl implements PushApi {


        @Resource
        private PushManageService pushManageService;

        /**
         * 新增推送
         * @param createReqDTO
         * @return
         */
        @TenantIgnore
        @Override
        public Long createPushManage(PushManageCreateReqDTO createReqDTO) {
            PushManageCreateReqVO pushManageCreateReqVO=new PushManageCreateReqVO();
            BeanUtils.copyProperties(createReqDTO,pushManageCreateReqVO);
            return pushManageService.createPushManage(pushManageCreateReqVO);
        }
        /**
         * 更新推送
         * @param updateReqDTO
         * @return
         */
        @TenantIgnore
        @Override
        public Boolean updatePushManage(PushManageUpdateReqDTO updateReqDTO) {
            PushManageUpdateReqVO pushManageUpdateReqVO=new PushManageUpdateReqVO();
            BeanUtils.copyProperties(updateReqDTO,pushManageUpdateReqVO);
            pushManageService.updatePushManage(pushManageUpdateReqVO);
            return true;
        }

        /**
         * 删除推送
         * @param id
         * @return
         */
        @TenantIgnore
        @Override
        public Boolean deletePushManage(Long id) {
            pushManageService.deletePushManage(id);
            return true;
        }

        /**
         *  获得普退
         * @param id
         * @return
         */
        @TenantIgnore
        @Override
        public PushManageRespDTO getPushManage(Long id) {
            PushManageRespDTO pushManageRespDTO=new PushManageRespDTO();
            PushManageDO pushManageDO=pushManageService.getPushManage(id);
            BeanUtils.copyProperties(pushManageDO,pushManageRespDTO);
            return pushManageRespDTO;
        }

        /**
         * 获得推送列表
         * @param pageDTO
         * @return
         */
        @TenantIgnore
        @Override
        public PageResult<PushManageRespDTO> getPushManagePage(PushManagePageReqDTO pageDTO) {
            PushManagePageReqVO pushManagePageReqVO=new PushManagePageReqVO();
            BeanUtils.copyProperties(pageDTO,pushManagePageReqVO);
            PageResult<PushManageDO> pageResult = pushManageService.getPushManagePage(pushManagePageReqVO);
            return PushManageConvert.INSTANCE.convertPage1(pageResult);
        }


}
